/****************************************************************************
'stack.h' - Header file that declares the type definition for StackNode
	        and stack. Also declares various functions that manipulate Stacks
	        or StackNodes (implemented elsewhere; see stack.c)
	      - Programmer: Vincent Paul F. Fiestada
*****************************************************************************/

#pragma once
#include "cardinal.h" // This file includes libraries used by entire project

typedef struct StackNode
{
	char Data;
	struct StackNode * Next;
} StackNode;

typedef struct
{
	StackNode * Top;
} Stack;

// Function declarations; see 'stack.c' for definitions
Stack * CreateNewStack();
void AnnihilateStack(Stack * targetStack);
StackNode * PushToStack(Stack * targetStack, char data);
char PopFromStack(Stack * targetStack);
void StackUnderflow();
void PrintStack(Stack * targetStack);

/******************************************************************************
Include Function Definitions: (Won't get compiled otherwise since I don't know
how to control the linker)
******************************************************************************/
#include "stack.c"